#include<map>
#include<iostream>
#define ll long long
using namespace std;
int m;
ll s;
int n,t;
ll ans;
ll a[100];
ll b[100];
map<pair<int,ll>,int>f;
ll fact(ll x){
    ll ret;
    for(ret=1;x;ret *= x--){
        if((s/ret)<x)return -1;
    }
    return ret;
}
void check1(){
    int cnt=0;
    ll sum=0;
    for(int i=1;i<=m;i++){
        if(b[i]==1){
            sum+=a[i];
        }
        else if(b[i]==2){
            ll ss=fact(a[i]);
            if((ss==-1)||(++cnt>t)||((ss+sum)>s))return;
            sum+=ss;
        }
        
    }
    ++f[pair<int,ll>(cnt,sum)];
    ++f[pair<int,ll>(-1,sum)];
}
void dfs1(int u){
    if(u>m){
        check1();
    }
    else {
        for(int i=0;i<=2;i++){
            b[u]=i;
            dfs1(u+1);
        }
    }
}
map<pair<int,ll>,ll>g;
ll qry(int x,ll ss){
    if(g.count(pair<int,ll>(x,ss)))return g[pair<int,ll>(x,ss)];
    return g[pair<int,ll>(x,ss)]=f[pair<int,ll>(x,ss)]+(x ? qry(x-1,ss):0);
}
void check2(){
    int cnt=0;
    ll sum=0;
    for(int i=m+1;i<=n;i++){
        if(b[i]==1){
            sum+=a[i];
        }
        else if(b[i]==2){
            ll ss=fact(a[i]);
            if((ss==-1)||(++cnt>t)||((ss+sum)>s))return;
            sum+=ss;
        }
        
    }
     if(f.count(pair<int,ll>(-1,s-sum)))ans+=qry(t-cnt,s-sum);
}
void dfs2(int u){
    if(u>n)check2();
    else {
        for(int i=0;i<=2;i++){
            b[u]=i;
            dfs2(u+1);
        }
    }
}

int main(){
    
    cin>>n>>t>>s;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    m=n>>1;
    dfs1(1);
    dfs2(m+1);
    cout<<ans;
    return 0;
}

